// package cn.iocoder.yudao.module.iot.mq.consumer.device;

// import cn.hutool.core.util.StrUtil;
// import cn.hutool.json.JSONUtil;
// import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
// import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
// import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
// import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber;
// import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
// import cn.iocoder.yudao.module.iot.dal.mysql.device.IotDeviceMapper;
// import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
// import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService;
// import cn.iocoder.yudao.module.iot.service.device.property.IotDevicePropertyService;
// import cn.iocoder.yudao.module.iot.service.mqtt.IotMqttServiceImpl.RadarSettingMessage;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.stereotype.Component;

// import jakarta.annotation.PostConstruct;
// import jakarta.annotation.Resource;
// import java.util.Map;

// /**
//  * 设备雷达设置消息订阅者
//  *
//  * @author 芋道源码
//  */
// @Component
// @Slf4j
// public class IotDeviceRadarMessageSubscriber implements IotMessageSubscriber<RadarSettingMessage> {

//     @Resource
//     private IotDeviceService deviceService;

//     @Resource
//     private IotMessageBus messageBus;
    
//     @Resource
//     private IotDeviceMapper deviceMapper;
    
//     @Resource
//     private IotDeviceMessageService deviceMessageService;
    
//     @Resource
//     private IotDevicePropertyService devicePropertyService;

//     @PostConstruct
//     public void init() {
//         messageBus.register(this);
//     }

//     @Override
//     public void onMessage(RadarSettingMessage message) {
//         log.info("[onMessage][收到雷达设置消息，设备ID: {}, 雷达设置: {}]",
//                 message.getDeviceId(), message.getRadarSettings());

//         // 设置租户上下文
//         TenantContextHolder.setIgnore(false);
//         TenantContextHolder.setTenantId(1L); // 默认租户ID为1

//         try {
//             // 1. 获取设备信息
//             IotDeviceDO device = deviceMapper.selectById(message.getDeviceId());
//             if (device == null) {
//                 log.error("[onMessage][设备不存在，设备ID: {}]", message.getDeviceId());
//                 return;
//             }

//             // 2. 获取设备的serverId
//             String serverId = devicePropertyService.getDeviceServerId(device.getId());
//             if (StrUtil.isEmpty(serverId)) {
//                 // 如果没有serverId，使用默认值
//                 serverId = "172_17_0_1_1883";
//                 log.warn("[onMessage][设备 {} 没有 serverId，使用默认值: {}]", device.getId(), serverId);
//             }

//             // 3. 构建设备消息
//             IotDeviceMessage deviceMessage = IotDeviceMessage.requestOf(
//                 "thing.property.set", // 属性设置方法
//                 message.getRadarSettings() // 雷达设置参数
//             );

//             // 设置设备ID
//             deviceMessage.setDeviceId(message.getDeviceId());

//             log.info("[onMessage][构建雷达设置设备消息成功 - 方法: {} 参数: {}]",
//                     deviceMessage.getMethod(), deviceMessage.getParams());

//             // 4. 发送到网关处理
//             cn.iocoder.yudao.module.iot.core.mq.producer.IotDeviceMessageProducer producer = 
//                 new cn.iocoder.yudao.module.iot.core.mq.producer.IotDeviceMessageProducer(messageBus);
            
//             // 发送到网关，让网关处理MQTT发送
//             producer.sendDeviceMessageToGateway(serverId, deviceMessage);

//             log.info("[onMessage][雷达设置消息发送到网关成功，设备ID: {}, 雷达设置: {}, serverId: {}]",
//                     message.getDeviceId(), message.getRadarSettings(), serverId);

//         } catch (Exception e) {
//             log.error("[onMessage][处理雷达设置消息失败，设备ID: {}, 雷达设置: {}]",
//                     message.getDeviceId(), message.getRadarSettings(), e);
//         } finally {
//             // 清理租户上下文
//             TenantContextHolder.clear();
//         }
//     }

//     @Override
//     public String getTopic() {
//         return "/sys/device/radar";
//     }

//     @Override
//     public String getGroup() {
//         return "iot-device-radar-group";
//     }
// }